//
//  main.c
//  指针的定义与初始化
//
//  Created by ws on 2017/7/20.
//  Copyright © 2017年 王松. All rights reserved.
//
//bit(比特位:计算机中最小的单位)
#include <stdio.h>
/**
 内存中最小的存储单元:字节,每一个字节在内存中都有一个编号,这个编号就是指针
 指针:内存地址
 有了指针你就有了打开这块内存的钥匙,就可以操作这块内存
 指针变量:存放指针的变量/存放内存地址的变量就是指针变量
 定义指针(指针变量): 指针所指向的数据类型 *指针变量名称;
 在定义指针变量的时候 *号是一个类型说明符,说明定义的变量是指针变量
 注意点:不是定义变量的时候  *号 是一个操作符 作用:访问指针所指向的存储空间(读和写)
 
 */
/**
 指针的定义
 */
void test(){
    //定义一个指针变量
    int num = 1;
    int *p;
    p = &num;
    *p = 20;
    printf("num = %d\n",num);
    
    
    int num2 = 30;
    int *p1;
    p1 = &num2;
    
    int *temp = p1;
    
    p1 = p;
    p = temp;
    
    printf("----%d-----%d\n",*p, *p1);
}
/**
 
 */
/**
 注意点:1.只有定义没有初始化的指针是个垃圾值,这个时候我们也成为这个指针为野指针
       2.如果操作了野指针
         2.1.程序崩溃
         2.2.你访问了不该你访问的存储空间,造成潜在的逻辑错误
       3、不可以使用整形常量赋值一个指针变量
       因为内存是操作系统分配我们的，不是我们随便取的
       4、什么类型的指针，只指向什么类型的变量
       5、多个指针可以指向同一变量
       6、指针的指向是可以改变的
 */
int main(int argc, const char * argv[]) {
////指针的初始化
//    //1.先定义 再进行初始化
//    int num = 10;
//    //先定义一个指针变量
//    int *p;
//    //*P = &num;//p还没有初始化,不能指向他的存储空间
//    p = &num;//p指向了num
//    *p = 20;
//    //2.定义指针变量的同时进行初始化
//    int num2 = 20;
//    int *p2 = &num2;
//    *p2 = 40;
//    printf("%d---%d\n",num2, *p2);// 40,40
//
//    //定义指针变量的时候不能使用整型常量不能赋值给指针变量,因为内存是操作系统分配给我们的,不是我们随便取的.
////    int *p3 = 1000;此处是错误的
////    int *p3 = 0x1000;此处是错误的
//    p2 = &num;
////    printf("%p\n",p2);
////    char c = 'a';
////    int *pc = &c;
////    *pc = 10;
//    printf("%p\n",p2);
    
    test();
    
    return 0;
}
